package v1

import (
	"devops-super/api"
	"devops-super/internal/model/entity"

	"github.com/gogf/gf/v2/frame/g"
)

// ProductConfigGetPageLstReq 分页获取产品配置列表请求
type ProductConfigGetPageLstReq struct {
	g.Meta `method:"get" path:"/product-config/page-list" summary:"分页获取产品配置列表" tags:"产品配置"`
	*api.PageLstReq
	ProductId int64  `json:"productId"  in:"query" description:"产品ID筛选"`
	GroupName string `json:"groupName"  in:"query" description:"配置组名筛选"`
}

// ProductConfigGetPageLstRes 分页获取产品配置列表响应
type ProductConfigGetPageLstRes struct {
	*api.PageLstRes[*entity.AppProductConfig]
}

// ProductConfigAddReq 新增产品配置请求
type ProductConfigAddReq struct {
	g.Meta      `method:"post" path:"/product-config" summary:"新增产品配置" tags:"产品配置"`
	ProductId   int64  `v:"required#产品ID不能为空" json:"productId"`
	GroupName   string `v:"required#配置组名不能为空" json:"groupName"`
	ConfigKey   string `v:"required#配置键不能为空" json:"configKey"`
	ConfigValue string `v:"required#配置值不能为空" json:"configValue"`
	Remark      string `json:"remark" description:"备注"`
}

// ProductConfigAddRes 新增产品配置响应
type ProductConfigAddRes struct{}

// ProductConfigUptReq 更新产品配置请求
type ProductConfigUptReq struct {
	g.Meta      `method:"put" path:"/product-config/{id}" summary:"更新产品配置" tags:"产品配置"`
	Id          int64  `v:"min:1#配置ID必须" path:"id"`
	ProductId   int64  `v:"required#产品ID不能为空" json:"productId"`
	GroupName   string `v:"required#配置组名不能为空" json:"groupName"`
	ConfigKey   string `v:"required#配置键不能为空" json:"configKey"`
	ConfigValue string `v:"required#配置值不能为空" json:"configValue"`
	Remark      string `json:"remark" description:"备注"`
}

// ProductConfigUptRes 更新产品配置响应
type ProductConfigUptRes struct{}

// ProductConfigDelReq 删除产品配置请求
type ProductConfigDelReq struct {
	g.Meta `method:"delete" path:"/product-config/{id}" summary:"删除产品配置" tags:"产品配置"`
	Id     int64 `v:"min:1#配置ID必须" path:"id"`
}

// ProductConfigDelRes 删除产品配置响应
type ProductConfigDelRes struct{}

// ProductConfigGetOneReq 获取单条产品配置请求
type ProductConfigGetOneReq struct {
	g.Meta `method:"get" path:"/product-config/get-one" summary:"获取单条产品配置" tags:"产品配置"`
	Id     int64 `v:"min:1#配置ID必须" json:"id"`
}

// ProductConfigGetOneRes 获取单条产品配置响应
type ProductConfigGetOneRes struct {
	Info *entity.AppProductConfig `json:"info"`
}

// ProductConfigGetOptionsReq 获取产品配置选项请求
type ProductConfigGetOptionsReq struct {
	g.Meta     `method:"get" path:"/product-config/get-options" summary:"获取产品配置选项" tags:"产品配置"`
	ProductId  int64  `json:"productId" description:"产品ID筛选"`
	FieldKey   string `json:"fieldKey" description:"自定义value字段"`
	FieldLabel string `json:"fieldLabel" description:"自定义label字段"`
}

// ProductConfigGetOptionsRes 获取产品配置选项响应
type ProductConfigGetOptionsRes struct {
	Options []*api.FormOptionsItem `json:"options"`
}

// GetProductGroupConfigsReq 获取配置组请求
type GetProductGroupConfigsReq struct {
	g.Meta    `method:"get" path:"/product-config/getGroupConfigs" summary:"获取配置组" tags:"产品"`
	ProductId int    `v:"min:1#产品ID必须" json:"productId" in:"query"`
	GroupName string `v:"required#配置组名必须" json:"groupName" in:"query"`
}

// GetProductGroupConfigsRes 获取配置组响应
type GetProductGroupConfigsRes struct {
	Configs   []*entity.AppProductConfig `json:"configs"`
	UpdatedAt string                     `json:"updatedAt"`
}

type SetProductGroupConfigsReq struct {
	g.Meta    `method:"post" path:"/product-config/setGroupConfigs" summary:"保存配置组" tags:"产品"`
	ProductId int    `v:"min:1#产品ID必须" json:"productId"`
	GroupName string `v:"required#配置组名必须" json:"groupName"`
	Configs   []struct {
		ConfigKey   string `v:"required#配置键必须" json:"configKey"`
		ConfigValue string `v:"required#配置值必须" json:"configValue"`
		ConfigDesc  string `json:"configDesc"`
	} `v:"required#配置项不能为空" json:"configs"`
}

type SetProductGroupConfigsRes struct{}
